package com.jdpc.weparty.service.activity.signup

import com.jdpc.weparty.entity.Activity
import com.jdpc.weparty.entity.SignUpActivity
import com.jdpc.weparty.entity.User
import org.springframework.data.domain.Page
import org.springframework.data.domain.Pageable

interface SignUpActivityService {
    /**
     * 查找某一用户报名参与的活动
     * @param passed  根据该参数区分活动状态， null -> 未审核。false ->未通过。 true -> 通过。
     */
    fun getActivityForm(userId: Int): List<Activity>
    fun getActivityForm(userId: Int, pageable: Pageable): Page<SignUpActivity>

    fun getActivityForm(userId: Int, passed: Boolean?): List<Activity>
    fun getActivityForm(userId: Int, passed: Boolean?, pageable: Pageable): Page<Activity>

    /**
     * 活动发布者 查看某一活动有哪些人报名
     * @param passed  根据该参数区分活动状态， null -> 未审核。false ->未通过。 true -> 通过。
     */
    fun getUserForm(aId: Int): List<User>
    fun getUserForm(aId: Int, passed: Boolean?): List<User>
    fun getUserForm(aId: Int, passed: Boolean?, pageable: Pageable): Page<User>

    /**
     * 报名参与活动。
     * @param userId 参与者的Id
     * @param activityId 参与活动的Id
     * @return Pair: first=报名过返回true , second=报名的状态 true:通过，false:未通过,null:未审核
     */
    fun signUp(userId: Int, activityId: Int): Pair<Boolean, Boolean?>

    /**
     * 是否同意参与活动的申请
     * @param passed 为审核的结果。true -> 通过。false -> 不通过
     */
    fun pass(userId: Int, activityId: Int, passed: Boolean)

    /**
     * 是否同意参与活动的所有申请
     * @param passed 为审核的结果。true -> 通过。false -> 不通过
     */
    fun passAll(activityId: Int, passed: Boolean)

    /**
     * 获取某活动签到的用户
     * @param sign 为签到的状态。 true -> 已签到。false -> 未签到
     */
    fun getSignJoiners(activityId: Int, sign: Boolean): List<User>
    fun getSignJoiners(activityId: Int, sign: Boolean, pageable: Pageable): Page<User>

    /**
     * 获取某用户签到的活动
     * @param sign 为签到的状态。 true -> 已签到。false -> 未签到
     */
    fun getSignActivities(userId: Int, sign: Boolean): List<Activity>
    fun getSignActivities(userId: Int, sign: Boolean, pageable: Pageable): Page<Activity>

    /**
     * 签到活动
     * @param userId 参与者id
     * @param activityId 活动id
     */
    fun signIn(userId: Int, activityId: Int)

}